package com.seedwill.common.view;

import java.util.List;
import java.util.Map;

/**
 * 分页数据集
 * 
 * 
 * @author kdyi
 *
 */
public interface IPagnationView {
	/**
	 * 取得环境
	 * @return
	 */
	Map getContext();
	/**
	 * 设置环境
	 * @param context
	 */
	void setContext(Map context);
	/**
	 * 开始记录
	 * @return
	 */
	int getStart();
	/**
	 * 结束记录
	 * @return
	 */
	int getEnd();
	/**
	 * 取每页数据容量.
	 * @return
	 */
	int getPageSize();

	/**
	 * 取总页数.
	 * @return
	 */
	int getTotalPage();

	/**
	 * 取总记录数.
	 * @return
	 */
	int getTotal();

	/**
	 *  取当前页中的记录.
	 * @return
	 */
	List getList();

	/**
	 * 取该页当前页码,页码从1开始.
	 * @return
	 */
	int getCurrentPageNo();
	
	/**
	 * @param currentPageNo
	 */
	void setCurrentPageNo(int currentPageNo);

	/**
	 * 默认分页容量
	 * @return
	 */
	int getDefaultPageSize();

	/**
	 * 默认开始页号
	 * @return
	 */
	int getDefaultStartPageNo();


	/**
	 * 获取任一页第一条数据在数据集的位置，每页条数使用默认值.
	 *
	 * @see #getStartOfPage(int,int)
	 */
	public int getStartOfPage(int pageNo);

	/**
	 * 获取任一页第一条数据在数据集的位置.
	 *
	 * @param pageNo   从1开始的页号
	 * @param pageSize 每页记录条数
	 * @return 该页第一条数据
	 */
	public int getStartOfPage(int pageNo, int pageSize);

	/**
	 * 设置每页数据容量.
	 * @param pageSize
	 */
	public void setPageSize(int pageSize);

	/**
	 * 设置当前页中的记录.
	 * @param list
	 */
	public void setList(List list);
	
	/**
	 * 取得开始页面
	 * @return
	 */
	public int getStartPage();

	/**
	 * 设置开始页面
	 * @param startPage
	 */
	public void setStartPage(int startPage);
	/**
	 * 准备分页数据
	 * @param num
	 * @param size
	 * @param total    total
	 * 
	 */
	public void prepare(int num, int size, int total);

	/**
	 * 取得当前页面开始记录
	 * @return
	 */
	public int getViewStart();

	/**
	 * 设置当前页面开始记录
	 * @param viewStart
	 */
	public void setViewStart(int viewStart);

	/**
	 * 取得当前页面结束记录
	 * @return
	 */
	public int getViewEnd();

	/**
	 * 设置当前页面结束记录
	 * @param viewEnd
	 */
	public void setViewEnd(int viewEnd);

	/**
	 * 是否有上一页
	 * @return
	 */
	public boolean isHasPrevious();

	/**
	 * 设置是否有上一页
	 * @param hasPrevious
	 */
	public void setHasPrevious(boolean hasPrevious);

	/**
	 * 取得上一页页码
	 * @return
	 */
	public int getPreviousPageNo();

	/**
	 * 设置上一页页码
	 * @param previousPageNo
	 */
	public void setPreviousPageNo(int previousPageNo);

	/**
	 * 是否有下一页
	 * @return
	 */
	public boolean isHasNext();

	/**
	 * 设置是否有下一页
	 * @param hasNext
	 */
	public void setHasNext(boolean hasNext);

	/**
	 * 取得下一页页码
	 * @return
	 */
	public int getNextPageNo();

	/**
	 * 设置下一页页码
	 * @param nextPageNo
	 */
	public void setNextPageNo(int nextPageNo);
	
	/**
	 * 取得最后一页页码
	 * @return
	 */
	public int getLastPageNo();
	
	/**
	 * 设置上一页页码
	 * @param lastPageNo
	 */
	public void setLastPageNo(int lastPageNo);
	
	/**
	 * 翻页步长（即当前视图呈现可点击页数）
	 * @return
	 */
	public int getPageNavStep();

	/**
	 * 设置翻页步长（即当前视图呈现可点击页数）
	 * @param pageNavStep
	 */
	public void setPageNavStep(int pageNavStep);
}
